package swimv2.ejb.entity;

import java.io.Serializable;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;

@Entity
@Table(name = "Lavoro")
public class Lavoro implements Serializable, Comparable<Lavoro>{
	public enum Stato {INOFFERTA, INCORSO, VAVALUTATO, TERMINATO};
	private static final long serialVersionUID = 1L;
	
	private String descrizioneBreve;
	private String descrizioneEstesa;
	private Set<Capacita> requisiti;
	
	private String commento;
	
	private Utente datore;
	private Utente dipendente;
	
	private boolean soloAmici = false;
	private Set<Utente> candidati = new TreeSet<Utente>();
	
	private Stato stato = Stato.INOFFERTA;
	 
	private int id;
	
	
	
	public Lavoro()
	{
		super();
		
		
	}

	
	

	 @Id
	 @GeneratedValue(strategy=GenerationType.AUTO)
	 @Column(name="ID") 
	public int getId() {
		return id;
	}



	public void setId(int id) {
		this.id = id;
	}

	@Column(name="descrizioneBreve")
	public String getDescrizioneBreve() {
		return descrizioneBreve;
	}

	public void setDescrizioneBreve(String descrizioneBreve) {
		this.descrizioneBreve = descrizioneBreve;
	}

	@Column(name="descrizioneEstesa")
	public String getDescrizioneEstesa() {
		return descrizioneEstesa;
	}

	public void setDescrizioneEstesa(String descrizioneEstesa) {
		this.descrizioneEstesa = descrizioneEstesa;
	}



	
	@ManyToMany 
	@JoinTable(name="requisitiLavoro",
		joinColumns={@JoinColumn(name="lavoro")},
		inverseJoinColumns={@JoinColumn(name="capacita")} )
	public Set<Capacita> getRequisiti() {
		return requisiti;
	}




	public void setRequisiti(Set<Capacita> requisiti) {
		this.requisiti = requisiti;
	}



	@ManyToOne
	@JoinColumn(name="datore")
	public Utente getDatore() {
		return datore;
	}




	public void setDatore(Utente datore) {
		this.datore = datore;
	}



	@OneToOne
	@JoinColumn(name="dipendente")
	public Utente getDipendente() {
		return dipendente;
	}




	public void setDipendente(Utente dipendente) {
		this.dipendente = dipendente;
	}



	@Column(name="stato")
	public Stato getStato() {
		return stato;
	}




	public void setStato(Stato stato) {
		this.stato = stato;
	}




	@Override
	public int compareTo(Lavoro nemico) {
		return  id-nemico.id;
	}



	@ManyToMany(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
	@JoinTable(name="lavoro_candidati",
	joinColumns={@JoinColumn(name="lavoro")},
	inverseJoinColumns={@JoinColumn(name="candidato")} )
	public Set<Utente> getCandidati() {
		return candidati;
	}




	public void setCandidati(Set<Utente> candidati) {
		this.candidati = candidati;
	}



	@Column(name="commento")
	public String getCommento() {
		return commento;
	}




	public void setCommento(String commento) {
		this.commento = commento;
	}



	@Column(name="soloAmici")
	public boolean isSoloAmici() {
		return soloAmici;
	}

	public void setSoloAmici(boolean soloAmici) {
		this.soloAmici = soloAmici;
	}
	
}
